/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PatronesProyecto;

import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

/**
 *
 * @author esteban
 */
public class Inventario implements Observer {

    private static Inventario objInventario;
    private FactoryProductos fabrica;
    public ArrayList<Producto> productos = null;

    Inventario() {
        setFabrica(new FactoryProductos());
        productos = new ArrayList<>();
        adicionarProductoAInventario("CP01", "Jeans", "Pantalones Azules", 80000.0, "Denim");
        adicionarProductoAInventario("CP02", "Camisa", "Camisa de Diseñador", 40000.0, "AyE");
        adicionarProductoAInventario("CP03", "Chaqueta", "Chaqueta en cuero negro", 120000.0, "Dennis");
        adicionarProductoAInventario("CP04", "Zapatos", "Zapatos en gamuza", 100000.0, "Cuplon");
        adicionarProductoAInventario("CP05", "Correas", "Correa en material sintético", 20000.0, "Denim");
    }

    public static Inventario getInstance() {
        if (objInventario == null) {
            System.out.println("No existe ninguna instancia del invetario. Se creara una");
            objInventario = new Inventario();
        } else {
            System.out.println("Ya existe una instancia del inventario. Se usará la instancia creada previamente.");
        }
        return objInventario;
    }
    
    public void setFabrica(FactoryProductos fabrica) {
        this.fabrica = fabrica;
    }
    
    public FactoryProductos getFabrica() {
        return fabrica;
    }
    
    public void adicionarProductoAInventario(String codProducto, String nombre, String descripcion, double precio, String proveedor) {
        productos.add(getFabrica().crearProductos(codProducto, nombre, descripcion, precio, proveedor));
    }

    public int consultarExistencias() {
        System.out.println("Consultando Existencias...");
        return 0;
    }

    public ArrayList<String> consultarProductos() {
        System.out.println("Consultando Productos...");
        return null;
    }

    public ArrayList<String> consultarProveedores() {
        System.out.println("Consultando Proveedores...");
        return null;
    }

    @Override
    public void update(Observable o, Object arg) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private class InventarioProductoIterator implements ProductoIterator {

        private int index = 0;

        @Override
        public boolean hasNext() {
            if (index < Inventario.getInstance().productos.size()) {
                return true;
            }
            return false;
        }

        @Override
        public Producto next() {
            return Inventario.getInstance().productos.get(index++);
        }

        @Override
        public Producto current() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Producto first() {
            // TODO Auto-generated method stub
            return null;
        }
    }
}
